package com.itheima.sky.service.impl;

import com.itheima.sky.constant.MessageConstant;
import com.itheima.sky.constant.RedisMessageConstant;
import com.itheima.sky.dao.UserMapper;
import com.itheima.sky.pojo.User;
import com.itheima.sky.service.UserService;
import com.itheima.sky.utils.BaseException;
import com.itheima.sky.utils.ValidateCodeUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.concurrent.TimeUnit;

/**
 * @Description UserServiceImpl
 * @Author jiangning
 * @Date 2024-06-27
 */
@Service
public class UserServiceImpl implements UserService {
//    @Autowired
//    private StringRedisTemplate rds;

    @Autowired
    UserMapper userMapper;
    /**
     * 校验短信验证码是否有效
     *
     * @param phone
     * @param code
     */
    @Override
    /**
     * 验证短信验证码
     *
     * @param phone 接收验证码的手机号
     * @param code 用户输入的验证码
     * @throws BaseException 如果验证码不匹配或验证码不存在，抛出此异常
     */
    public void verifySmsCode(String phone, String code) {
//        // 从Redis中获取存储的验证码
//        String codeInRds = rds.opsForValue().get(RedisMessageConstant.SENDTYPE_LOGIN + phone);
//        // 检查Redis中是否有验证码以及验证码是否匹配
//        if (codeInRds == null || !codeInRds.equals(code)) {
//            // 如果验证码不存在或不匹配，抛出异常
//            throw new BaseException(MessageConstant.VALIDATECODE_ERROR);
//        }
//        // 验证成功后，从Redis中删除验证码
//        rds.delete(RedisMessageConstant.SENDTYPE_LOGIN + phone);
    }


    /**
     * 生成短信验证码
     */
    @Override
    /**
     * 生成并发送短信验证码
     *
     * @param phone 接收验证码的手机号
     * @return 生成的验证码
     * @throws BaseException 如果验证码已存在且未过期，抛出此异常
     */
    public String generateSmsCode(String phone) {
        // 生成6位数的验证码
        String code = Integer.toString(ValidateCodeUtils.generateValidateCode(6));


//        // 从Redis中获取已有的验证码
//        String existCode = rds.opsForValue().get(RedisMessageConstant.SENDTYPE_LOGIN + phone);
//        // 如果已有验证码且未过期，抛出异常提示用户请勿重复发送
//        if (existCode != null) {
//            throw new BaseException("请勿重复发送验证码");
//        }
//        // 将生成的验证码存储到Redis，设置过期时间为2分钟
//        rds.opsForValue().set(RedisMessageConstant.SENDTYPE_LOGIN + phone, code, 2, TimeUnit.MINUTES);
//

        // 返回生成的验证码
        return code;
    }


    @Override
    public Long getUserIdByPhone(String phone) {
        return userMapper.findUserIdByPhone(phone);
    }

    @Override
    public Long insertUser(User userIn) {
        User user = new User();
        BeanUtils.copyProperties(userIn,user);
        userMapper.insertUser(user);
        return user.getId();
    }
}
